


//评论模块的路由

var express = require('express');
var router = express.Router();

var { checkSession,dateFormat } = require("../utils/index")
var { Mvs, Comment } = require("../utils/module")


router.get('/test', (req, res) => {
    res.send('评论路由创建成功')
})


// router.get('/index',(req,res)=>{
//     // res.send('评论页面');

//     // res.render('htmlEjs/comment',{username:req.session.username})
//     checkSession(req,res,()=>{
//         var {mid} = req.query;
//         var obj = {}
//         if(mid){
//             obj = {id:mid}
//         }

//         // Mvs.findOne(obj)
//         // .then(result=>{
//         //     res.render("comment",{
//         //         username:req.session.username,
//         //         result
//         //     })
//         // })

//         const findOneData = function(obj,callback){
//             Mvs.findOne(obj)
//             .then(result=>{
//                 callback(result);
//             })
//         }

//         findOneData(obj,(result)=>{
//             res.render("htmlEjs/comment",{
//                 username:req.session.username,
//                 result
//             })
//         })

//     })
// })


router.get('/index', (req, res) => {
    // res.send('评论页面');

    // res.render('htmlEjs/comment',{username:req.session.username})
    checkSession(req, res, () => {

        //渲染页面
        // 先渲染左边的电影信息,根据用户点击的电影带来的id去数据库里查询电影信息渲染页面
        var query = req.query
        var { mid } = query;

        //判断用户是否传来数据
        if (mid) {//如果存在,当然必须存在，
            Mvs.findOne({
                id: mid
            }).then(result => {
                // console.log(result);
                res.render('htmlEjs/comment', {
                    result,
                    username: req.session.username
                })
            })

        } else {
            // res.send(`<script>alert('')</script>`)
            Mvs.findOne({})
                .then(result => {
                    // console.log(result);
                    res.render('htmlEjs/comment', {
                        result,
                        username: req.session.username
                    })
                })
        }

        const finddata = function (obj, callback) {
            Mvs.findOne(obj)
                .then(result => {
                    res.render('htmlEjs/comment', {
                        result,
                        username: req.session.username
                    })
                })
        }


        // var obj = {}
        // if (mid) {
        //     obj = { id: mid }
        // }

        // const findOneData = function (obj, callback) {
        //     Mvs.findOne(obj)
        //         .then(result => {
        //             callback(result);
        //             // (result) => {
        //             //     res.render("htmlEjs/comment", {
        //             //         username: req.session.username,
        //             //         result
        //             //     })
        //             })
        // }

        // findOneData(obj, (result) => {
        //     res.render("htmlEjs/comment", {
        //         username: req.session.username,
        //         result
        //     })
        // })





    })
})






// 提交评论
router.post("/submit", (req, res) => {
    const query = req.query;
    const body = req.body;
    // console.log(query);
    // console.log(body)
    checkSession(req, res, () => {
        Mvs.findOne({
            id: query.mid,
        }).then(movie => {
            body.time = new Date();
            body.author = req.session.username;
            body.mid = query.mid;
            body.movie = movie;
            Comment.insertMany(body)
                .then(result => {
                    //  res.send("评论成功...")
                    res.redirect('/comment/htmlEjs/mlist')
                })
        })
    })

})

// 评论列表  渲染页面
router.get('/htmlEjs/mlist', (req, res) => {
    // res.render('htmlEjs/mlist',{
    //     username:req.session.username
    // })
    checkSession(req, res, () => {

        var { page, size } = req.query;//获取用户的分页数据
        //根据用户提交的分页数据，让页面相应的显示数据
        //页数需要去数据库查询总共有多少条数据，然后拿数据数量去除以每一页显示多少数据就能得到多少页数
        var total = 0;//存储数据的数量
        var totalPage = 0;//
        size = size * 1 || 10;//每页的数量，默认为每页显示10条数据
        page = page * 1 || 1;//页数

        //查询数据库数据的数量，并计算出总页数
        Comment.find()
            .then(data => {
                total = data.length;//查询到的数据是一个数组形式的数据，所以该数组的长度就是我们要找的数据数量
                totalPage = Math.ceil(total / size);//得到总页数
                //为了避免出现负数的页数和大于总页数的页数，要判断下
                page = page < 1 ? 1 : page;//当页数小于1时当前页数就是第一页
                page = page > totalPage ? totalPage : page;//当当前页数大于最大页数时，当前页数就锁定最大页数，否则就是当前页数


                Comment.find()
                    .skip((page-1)*size)
                    .limit(size)
                    .sort({ _id: -1 })
                    .then(result => {
                        result = result.map(item=>{
                            item = {...item._doc,time:dateFormat(item.time)}
                            return item;
                        })
                        res.render('htmlEjs/mlist', {
                            username: req.session.username,
                            result,
                            page,
                            size,
                            total,
                            totalPage

                        })
                    })
            })



    })
})



//点击电影列表的电影时，显示点击的电影的所有评论，渲染页面
router.get('/htmlEjs/filmc',(req,res)=>{
    checkSession(req,res,()=>{
        // 获取点击的电影的id查询该电影的信息
        var{mid} = req.query;

        Comment.find({
            mid
        }).then(result=>{
            result = result.map(item=>{
                item = {...item._doc,time:dateFormat(item.time)}
                return item;
            })
            res.render('htmlEjs/filmc',{
                username:req.session.username,
                movie:result[0].movie,
                result
            })
        })
    })
})


//渲染查看用户的所有评论页面
router.get('/htmlEjs/userc',(req,res)=>{
    checkSession(req,res,()=>{

        var {author} = req.query;

        Comment.find({
            author
        }).then(result=>{
            result = result.map(item=>{
                item = {...item._doc,time:dateFormat(item.time)}
                return item;
            })
            res.render('htmlEjs/userc',{
                username:req.session.username,
                author,
                result
            })
        })
    })
})



//渲染评论标题下的评论详情
router.get('/htmlEjs/cdetail',(req,res)=>{
    checkSession(req,res,()=>{

        var {_id} = req.query;

        Comment.findOne({
            _id
        }).then(result=>{
            result = {...result._doc,time:dateFormat(result.time)};
            res.render('htmlEjs/cdetail',{
                username:req.session.username,
                result,
    
            })
        })
    })
})



//回复用户评论
router.all('/htmlEjs/answer',(req,res)=>{


    // res.send('回复评论成功')
    //判断用户是否登录
    checkSession(req,res,()=>{
        //接收用户传来的数据查询
        var {_id,subtitle} = req.body;

        Comment.findOne({_id})
        .then(data=>{
            //把用户传来的数据添加进数据库

            //先定义一个存放数据的数组，把获得到的数据添加进去
            var answer = data.answer || [];
            answer.push({
                subtitle,
                id:answer.length,
                author:req.session.username,
                time:dateFormat(new Date())
            });

            //把存放用户数据的数组添加进数据库
            Comment.updateMany({
                _id
            },{
                $set:{
                    answer
                }
            }).then(result=>{
                res.json({
                    code:200,
                    msg:"回复评论成功",
                    result,
                    type:1
                })
            })


        })

    })

})


// 删除评论
router.all('/htmlEjs/delc',(req,res)=>{
    checkSession(req,res,()=>{
        var {_id}= req.body;

        Comment.remove({
            _id
        }).then(result=>{
            res.json({
                code:200,
                msg:'评论删除成功',
                result,
                type:1
            })
        })
    })
})



//渲染修改电影评论页面
router.get('/htmlEjs/updatec',(req,res)=>{
    var {_id} = req.query;

    Comment.findOne({
        _id
    }).then(result=>{
        result = {...result._doc,time:dateFormat(result.time)};
        res.render('htmlEjs/updatec',{
            result,
            movie:result.movie,
            username:req.session.username
        })
    })
})


// 修改评论
router.post("/htmlEjs/updatesumbit",(req,res)=>{
    checkSession(req,res,()=>{
        var body = req.body;
        body.time = new Date();
        Comment.updateMany({
            _id:req.query._id
        },{
            $set:body
        }).then(result=>{
            res.redirect("/comment/htmlEjs/mlist")
            console.log('修改成功');
        }).catch(err=>{
            console.log(err);
        })
    })
})



var multiparty = require('multiparty');
var fs = require('fs')

// 上传图片
router.post("/uploadImg",(req,res)=>{
    const form = new multiparty.Form();
    form.encoding = "utf-8"
    form.uploadDir = "./uploadtemp"  // 临时文件中转站
    form.maxFilesSize = 8*1024*1024;  // 8M 
    form.parse(req,function(err,fields,files){
        if(err) {
            console.log(err)
            res.send("<script>alert('图片过大,请重新上传');location.reload()'</script>")
        }
        var uploadUrl = "/images/upload/",
        file  = files['filedata'], // 图片信息
        originalFilename = file[0].originalFilename, // 文件名
        tempath = file[0].path;
        var timestamp = new Date().getTime(); // 时间戳
        uploadUrl += timestamp+originalFilename;  // 1.jpg ==> 15112341231.jpg
        var newPath = "./public"+uploadUrl;  // 最后路径 
        var fileRead = fs.createReadStream(tempath);
        var fileWrite = fs.createWriteStream(newPath);
        fileRead.pipe(fileWrite);
        fileWrite.on("close",()=>{
            fs.unlinkSync(tempath);
            res.json({
                err:"",
                msg:uploadUrl
            })
        })
    })
})

// 在线聊天 
router.get('/htmlEjs/chat',(req,res)=>{
    checkSession(req,res,()=>{
        res.render("htmlEjs/chat",{
            username:req.session.username
        })
    })
})

module.exports = router;